Skip to content

Latest commit

 

History

History
354 lines (255 loc) · 15.4 KB

05-Arquitetura da Solução.md

File metadata and controls

354 lines (255 loc) · 15.4 KB

Arquitetura da Solução

Pré-requisitos: Projeto de Interface

A seguir, estão descritos os componentes e o ambiente de hospedagem da aplicação ReciclaMais. Este projeto busca oferecer uma plataforma de conexão para descarte sustentável de resíduos eletrônicos, integrando cidadãos e serviços de coleta.

Fluxo de Interação com o Sistema

Abaixo está uma figura que representa o fluxo de interação do usuário com o sistema:

  • Interface do Usuário (Front-End): O usuário interage com a aplicação por meio de uma interface web construída com ASP.NET Core MVC. Nessa interface, o usuário pode navegar, visualizar informações, fazer agendamentos e realizar outras operações.

  • Controle (ASP.NET Core MVC Controller): As requisições do usuário são enviadas para os controladores da aplicação, onde são processadas e direcionadas para a lógica de negócios adequada.

  • Banco de Dados (SQL Server): O Entity Framework Core é responsável por comunicar a aplicação com o banco de dados SQL Server, facilitando as operações CRUD (Create, Read, Update, Delete) dentre outras.

  • Resposta ao Usuário: Após o processamento, o resultado é retornado ao controlador, que prepara a resposta e a envia para o front-end, onde é exibida ao usuário.

Arquitetura da Solução

Diagrama de Classes

Diagrama de Classes - Versão 2

Diagrama de Classes - Versão 1(Etapa 2)

Este diagrama de classes representa o sistema de agendamentos e coleta de produtos eletrônicos, voltado para diferentes tipos de usuários, incluindo administradores, municípes e órgãos públicos. O sistema permite o gerenciamento de produtos, agendamentos e notícias, com funcionalidades específicas para cada tipo de usuário.

Diagrama de Classes - Versão 2

Diagrama de Classes - Versão 2(Etapa 3)

Classes e Atributos

Administrador

A classe Administrador representa um usuário com privilégios de administração no sistema. O administrador possui atributos como NomeAdm e métodos para gerenciar notícias e produtos.

  • Métodos:
  1. CadastrarNoticia: Permite o cadastro de uma notícia com imagem, título, resumo, conteúdo, e data de publicação.
  2. CadastrarProduto: Permite o cadastro de novos produtos com informações como nome, descrição e pontuação unitária.
  3. ExcluirNoticia: Permite a exclusão de uma notícia específica.

Noticia

A classe Noticia representa as notícias cadastradas no sistema. Ela contém atributos como Id, Imagem, DataPublicacao, Titulo, Resumo, e Conteudo. As notícias podem ser gerenciadas pelo administrador e exibidas aos usuários do sistema.

Produto

A classe Produto define os produtos disponíveis para coleta no sistema. Os atributos incluem Id, Nome, Descricao e PontuacaoUnitaria, que indica a pontuação atribuída por unidade do produto. Os produtos cadastrados são utilizados nos agendamentos e compõem os itens de coleta.

ItemColeta

A classe ItemColeta representa um item específico que será coletado durante um agendamento. Cada ItemColeta está associado a um Produto e inclui atributos como Quantidade e EstadoConservacao. O atributo EstadoConservacao é do tipo EstadoConservacao, um enumerado que indica o estado de conservação do item (Novo, Usado, ou Descarte).

  • Método:
  1. CalcularPontuacao: Calcula a pontuação do item multiplicando a pontuação unitária do produto pela quantidade especificada.

Agendamento

A classe Agendamento representa um agendamento de coleta de produtos. Ela contém atributos como Id, DataAgendamento, Horario, PontuacaoTotal, e uma lista de ItemColeta.

  • Método:
  1. CalcularPontuacaoTotal: Calcula a pontuação total do agendamento somando a pontuação de cada item de coleta.

Usuario

A classe Usuario é uma classe base para diferentes tipos de usuários no sistema. Ela inclui atributos como Id, Nome, Estado, Cidade, Bairro, Rua, Cep, Numero, Complemento, Username, e Password.

  • Métodos:
  1. VerificarLogin: Verifica as credenciais de login do usuário.
  2. Cadastro: Permite o cadastro de um novo usuário.
  3. Login: Realiza o login do usuário no sistema.
  4. AtualizarPerfil: Permite que o usuário atualize seu perfil.

Municipe

A classe Municipe é uma especialização de Usuario e representa um usuário que pode fazer agendamentos de coleta. Ela contém atributos específicos como Cpf, Sobrenome, DataNascimento, e Pontuacao.

  • Métodos:
  1. CriarAgendamento: Permite que o município crie um novo agendamento de coleta.
  2. ListarAgendamentos: Retorna uma lista de agendamentos feitos pelo município.

OrgaoPublico

A classe OrgaoPublico é outra especialização de Usuario, representando um órgão público que pode consultar agendamentos de coleta.

  • Atributo: Nome: Nome do órgão público.
  • Método:
  1. ConsultarAgendamentos: Permite que o órgão público consulte todos os agendamentos do sistema.

Enumerações

TipoUsuario

Enumeração que define os tipos de usuários que podem acessar o sistema: Administrador, Municipio, e OrgaoPublico.

EstadosBrasil

Enumeração que define os estados do Brasil, utilizados no atributo Estado da classe Usuario.

EstadoConservacao

Enumeração que define o estado de conservação de um item de coleta: Novo, Usado, e Descarte.

Relacionamentos entre Classes

  • Herança: A classe Usuario é a classe base para Municipe e OrgaoPublico, representando a relação "é-um" (ou especialização) entre usuários do sistema.

  • Agendamento e ItemColeta: A classe Agendamento possui uma associação de 1 para * com ItemColeta, indicando que um agendamento pode conter vários itens de coleta.

  • ItemColeta e Produto: Cada ItemColeta está associado a um Produto, permitindo acesso direto às informações de pontuação do produto.

  • Administrador, Noticia, e Produto: A classe Administrador tem métodos para gerenciar Noticia e Produto, indicando que o administrador é responsável por manter esses registros no sistema.

Modelo ER

Diagrama de Classes - Versão 2

MER - Versão 1(Etapa 2)

Diagrama de Classes - Versão 2

MER - Versão 2.1(Etapa 3)

Usuario é a entidade principal que armazena as informações gerais de cada usuário, incluindo atributos como Nome, Cpf, DataNascimento, Endereco, e TipoUsuario, que define se o usuário é um Administrador, OrgaoPublico, ou Municipe.

Produto representa os produtos que podem ser coletados, com cada produto possuindo uma PontuacaoUnitaria.

Agendamento é a entidade que permite que um Municipe realize um agendamento de coleta.

Noticia representa as notícias que podem ser cadastradas no sistema, uma tarefa atribuída aos Administradores.

ItemColeta representa os itens de coleta específicos de cada agendamento, associando um produto a uma quantidade e ao estado de conservação.

Esquema Relacional

Diagrama de Classes - Versão 2

Modelo Relacional - Versão 1(Etapa 2)

Diagrama de Classes - Versão 2

Modelo Relacional - Versão 2(Etapa 3)

Modelo Físico (DDL)

CREATE DATABASE RMDatabase; 
USE RMDatabase;

CREATE TABLE Usuario ( id INT PRIMARY KEY, 
    nome VARCHAR(255) NOT NULL, sobrenome VARCHAR(255), data_nascimento DATE,pontuacao INT, cpf VARCHAR(20), estado ENUM( 'AC', 'AL', 'AP', 'AM', 'BA', 'CE', 'DF', 'ES', 'GO', 'MA', 'MT', 'MS', 'MG', 'PA', 'PB', 'PR', 'PE', 'PI', 'RJ', 'RN', 'RS', 'RO', 'RR', 'SC', 'SP', 'SE', 'TO' ) NOT NULL, 
    cidade VARCHAR(255) NOT NULL, 
    bairro VARCHAR(255) NOT NULL, 
    rua VARCHAR(255) NOT NULL, 
    cep VARCHAR(20) NOT NULL, 
    numero INT, 
    complemento VARCHAR(255), 
    username VARCHAR(255) UNIQUE NOT NULL, senha VARCHAR(255) NOT NULL, 
    tipo_usuario ENUM('Administrador', 'Municipe', 'OrgaoPublico') );

CREATE TABLE Agendamento ( 
    id INT PRIMARY KEY,
    data_agendamento DATE NOT NULL, 
    horario TIME NOT NULL, 
    pontuacao_total INT DEFAULT 0, 
    usuario_id INT, 
    FOREIGN KEY (usuario_id) REFERENCES Usuario(id) );

CREATE TABLE Noticia ( 
    id INT PRIMARY KEY, 
    imagem VARCHAR(255) NOT NULL, data_publicacao DATE NOT NULL, 
    titulo VARCHAR(255) NOT NULL, 
    resumo TEXT, conteudo TEXT, 
    usuario_id INT, 
    FOREIGN KEY (usuario_id) REFERENCES Usuario(id) );

CREATE TABLE Produto ( 
    id INT PRIMARY KEY, 
    nome VARCHAR(255) NOT NULL, 
    descricao TEXT, 
    pontuacao_unitaria INT NOT NULL, 
    usuario_id INT, 
    FOREIGN KEY (usuario_id) REFERENCES Usuario(id) );

CREATE TABLE ItemColeta ( 
    id INT PRIMARY KEY, 
    agendamento_id INT, 
    produto_id INT, 
    quantidade INT NOT NULL, 
    estado_conservacao ENUM('Novo', 'Usado', 'Descarte') CHECK (estado_conservacao IN ('Novo', 'Usado', 'Descarte')), pontuacao_total INT, 
    FOREIGN KEY (agendamento_id) REFERENCES Agendamento(id), FOREIGN KEY (produto_id) REFERENCES Produto(id) );

Instruções SQL de Manipulação do BD (DML)

Inserir Dados

-- Inserindo dados na tabela Usuario 
INSERT INTO Usuario (nome, sobrenome,
    data_nascimento, pontuacao, cpf, estado, cidade, bairro, rua, cep, numero, complemento, username, senha, tipo_usuario
VALUES 
    ('João', 'Silva', '1990-05-20', 100, '123.456.789-00', 'SP', 'São Paulo', 'Centro', 'Rua A', '01000-000', 123, 'Apto 45', 'joaosilva', 'senha123', 'Municipe'), 
    ('Maria', 'Oliveira', '1985-08-15', 200, '987.654.321-00', 'RJ', 'Rio de Janeiro', 'Copacabana', 'Avenida B', '22000-000', 456, 'Ap 101', 'mariaoliveira', 'senha456', 'Administrador'); 

-- Inserindo dados na tabela Agendamento 
INSERT INTO Agendamento (data_agendamento, horario, pontuacao_total, usuario_id) 
VALUES 
    ('2024-11-15', '10:00:00', 50, 1),
    ('2024-11-16', '14:00:00', 40, 2); 
    
-- Inserindo dados na tabela Noticia 
INSERT INTO Noticia (imagem, data_publicacao, titulo, resumo, conteudo, usuario_id) 
VALUES 
    ('imagem1.jpg', '2024-11-10', 'Título da Notícia 1', 'Resumo da notícia 1', 'Conteúdo detalhado da notícia 1', 1), 
    ('imagem2.jpg', '2024-11-11', 'Título da Notícia 2', 'Resumo da notícia 2', 'Conteúdo detalhado da notícia 2', 2); 

-- Inserindo dados na tabela Produto 
INSERT INTO Produto (nome, descricao, pontuacao_unitaria, usuario_id) 
VALUES 
    ('Produto A', 'Descrição do Produto A', 10, 1), 
    ('Produto B', 'Descrição do Produto B', 20, 2); 
    
-- Inserindo dados na tabela ItemColeta 
INSERT INTO ItemColeta (agendamento_id, produto_id, quantidade, estado_conservacao, pontuacao_total) 
VALUES 
    (1, 1, 5, 'Novo', 50), 
    (2, 2, 3, 'Usado', 60

Atualizar Dados

-- Atualizando dados na tabela Usuario 
UPDATE Usuario 
SET nome = 'João Pedro', pontuacao = 150 WHERE id = 1; 
UPDATE Usuario 
SET cidade = 'Niterói', pontuacao = 220 WHERE id = 2; 

-- Atualizando dados na tabela Agendamento UPDATE Agendamento 
SET pontuacao_total = 70 
WHERE id = 1; 
UPDATE Agendamento 
SET horario = '15:00:00' 
WHERE id = 2; 

-- Atualizando dados na tabela Noticia 
UPDATE Noticia 
SET titulo = 'Título Atualizado da Notícia 1' WHERE id = 1; 
UPDATE Noticia 
SET resumo = 'Resumo atualizado da notícia 2' WHERE id = 2; 

-- Atualizando dados na tabela Produto 
UPDATE Produto 
SET pontuacao_unitaria = 25 
WHERE id = 2; 
UPDATE Produto 
SET descricao = 'Nova descrição do Produto C' WHERE id = 3; 

-- Atualizando dados na tabela ItemColeta UPDATE ItemColeta 
SET estado_conservacao = 'Usado', pontuacao_total = 55 
WHERE id = 1; 
UPDATE ItemColeta 
SET quantidade = 4, pontuacao_total = 80 
WHERE id = 2; 

Excluir Dados

-- Deletando dados na tabela Usuario
DELETE FROM Usuario
WHERE id = 1;
DELETE FROM Usuario
WHERE id = 2;

-- Deletando dados na tabela Agendamento
DELETE FROM Agendamento
WHERE id = 1;
DELETE FROM Agendamento
WHERE id = 2;

-- Deletando dados na tabela Noticia
DELETE FROM Noticia
WHERE id = 1;
DELETE FROM Noticia
WHERE id = 2;

-- Deletando dados na tabela Produto
DELETE FROM Produto
WHERE id = 1;
DELETE FROM Produto
WHERE id = 2;

-- Deletando dados na tabela ItemColeta
DELETE FROM ItemColeta
WHERE id = 1;
DELETE FROM ItemColeta
WHERE id = 2;

Tecnologias Utilizadas

Para o desenvolvimento da plataforma, foram escolhidas tecnologias robustas e modernas, com foco em desempenho, escalabilidade e facilidade de manutenção. As tecnologias usadas são descritas abaixo:

Linguagem de Programação:

  • C#: Utilizada para o desenvolvimento de toda a lógica de negócios e da interface de backend, com a aplicação sendo construída no framework .NET.

Frameworks:

  • ASP.NET Core MVC: Escolhido como o framework principal para desenvolvimento da aplicação web. Com ASP.NET Core MVC, podemos desenvolver uma aplicação baseada no padrão MVC (Model-View-Controller), que permite a separação entre a lógica de apresentação, controle e dados.

  • Entity Framework Core (EF Core): Usado como o ORM (Object-Relational Mapping) para facilitar a interação entre a aplicação e o banco de dados. O EF Core permite trabalhar com dados de forma mais intuitiva, mapeando as classes da aplicação para as tabelas no banco de dados e automatizando as operações CRUD.

Banco de Dados:

  • SQL Server: Escolhido como o banco de dados relacional para armazenar as informações da aplicação, como dados de usuários, produtos, agendamentos e outras entidades do sistema.

Ferramentas de Desenvolvimento:

  • Visual Studio: IDE utilizada para o desenvolvimento da aplicação ASP.NET Core, com suporte a C# e EF Core. A IDE oferece ferramentas de debug e integração com o controle de versão.

  • Postman: Ferramenta de teste de APIs, usada para testar e validar as rotas e endpoints do backend.

  • Git e GitHub: Para controle de versão e hospedagem do código, permitindo o gerenciamento do código-fonte e colaboração entre desenvolvedores.

Hospedagem

Serviço Utilizado

  • Azure App Service (Plano Gratuito)
  • Azure SQL Database (Plano Gratuito)

A hospedagem da aplicação foi realizada com o auxílio do Microsoft Azure, através dos passos descritos abaixo, e pode ser acessada através do link: https://reciclamais-h4bhewh5ehepc7hf.brazilsouth-01.azurewebsites.net/

Passos Realizados

  1. Criação do App Service e Banco de Dados no Azure

  2. Configuração da Connection String:

    • Ajuste da connection string no arquivo appsettings.json para conectar a aplicação ao banco de dados hospedado no Azure.
  3. Permissões de Acesso ao Banco:

    • Configuração da regra de firewall no banco de dados para permitir o acesso ao IP público da máquina.
  4. Deploy da Aplicação:

    • Realização do deploy da aplicação no Azure App Service através do Visual Studio.
  5. Atualização do Banco de Dados:

    • Execução do comando Update-Database para garantir que a estrutura do banco de dados fosse compatível com o Azure.
  6. Teste de Funcionalidade:

    • Verificação de que a aplicação está funcionando corretamente, com login, cadastro e demais funcionalidades operando como esperado.